home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / data / happysrc / pcheap.c < prev    next >
Text File  |  1993-11-30  |  2KB  |  72 lines

  1. /***************************************************
  2.  *                                                 *
  3.  *      *** HAPPy Pascal Compiler ***              *
  4.  *         作業用heapメモリ管理処理                *
  5.  *                                                 *
  6.  *         Copyright (c) H.Asano 1992              *
  7.  *                                                 *
  8.  ***************************************************/
  9.  
  10. #define EXTERN extern
  11.  
  12. #define Maxheap       32768             /* 最大heapメモリ量           */
  13.  
  14. #include <malloc.h>
  15. #include <stdlib.h>
  16. #include "pascomp.h"
  17.  
  18.  
  19. extern void pcerr(int,char*) ;
  20. extern void term(void) ;
  21.  
  22. static char *topheap  ;                 /* 今のheapメモリ先頭         */
  23. static size_t total  = 0 ;              /* 確保量累計                 */
  24.  
  25.  
  26. /***************************************/
  27. /* initheap() : 初期メモリ一括確保処理 */
  28. /***************************************/
  29. void initheap(void)
  30. {
  31.      topheap = (char*)malloc(Maxheap);  /* 一括確保する               */
  32.      if(topheap == nil) {
  33.       pcerr(700,"");
  34.       term() ;
  35.      }
  36. }
  37.  
  38. /**************************************/
  39. /*    Malloc() : メモリ確保処理       */
  40. /**************************************/
  41. void *Malloc(size_t size)
  42. {
  43.   void *adr ;
  44.  
  45.      adr  = (void*)topheap   ;
  46.      size = (size+1)/2 * 2   ;
  47.      topheap  += size ;
  48.      total    += size ;
  49.      if(Maxheap >= total) return(adr);  /* メモリ割当が可能な時       */
  50.      else {                             /* 割当不可能の時             */
  51.       pcerr(700,"") ;                   /*   作業エリア確保失敗       */
  52.       term()        ;                   /*   終了処理                 */
  53.      }
  54. }
  55.  
  56. /**************************************/
  57. /*  mark() : 一括解放ポイントマーク処理  */
  58. /**************************************/
  59. void *mark(void)
  60. {
  61.      return((void*)topheap) ;
  62. }
  63.  
  64. /**************************************/
  65. /*    release() : 一括解放処理        */
  66. /**************************************/
  67. void release(void *adr)
  68. {
  69.      total   -= (size_t)(topheap - (char*)adr) ;
  70.      topheap =  (char*)adr ;
  71. }
  72.